import java.io.*;

/*
  Realizeaza adunarea a doua numere citite de la consola
  */
public class Additive
{
  /*
    Functia principala a programului; cand se executa programul
    se executa de fapt metoda main() din clasa cu acelasi nume
    @param args sunt parametrii programului, dati in linia de c-da
    @throws deocamdata nu arunca exceptii
  */
  public static void main (String[] args)
  {
    // se afiseaza o mica introducere
    System.out.println ("Calculul sumei a doua numere");
    
    // ne intereseaza sa cream un reader buffer-at de unde citim string-uri
    InputStreamReader stdin = new InputStreamReader (System.in);
    BufferedReader console = new BufferedReader (stdin);
    
    String s;
    float a = 0, b = 0;
    
    try
    {
      // se citeste cate o linie intreaga (terminata cu ENTER)
      System.out.print ("Introduceti a: ");
      s = console.readLine ();
      a = Float.parseFloat (s);
      
      System.out.print ("Introduceti b: ");
      s = console.readLine ();
      b = Float.parseFloat (s);
    }
    catch (IOException ioex)
    {
      // aici se ajunge daca intrarea se inchide prematur
      System.out.println ("Input error");
      System.exit (1);
    }
    catch (NumberFormatException nfex)
    {
      // aici se ajunge daca tastam ceva ce nu seamana a numar real
      System.out.println ("\"" + nfex.getMessage () + "\"" +
          " is not numeric");
      System.exit (1);
    }
    
    // sa calculam suma, afisind-o pe sapte pozitii, completand cu 0 la
    // inceput, cu trei cifre dupa virgula, un numar float
    System.out.print (a + " + " + b + " = ");
    String result = String.format ("%1$07.3f", a+b);
    System.out.println (result);    
    
    // sa cream o referinta de tip Additive
    Additive ad;
    
    // sa o initializam creind si un obiect de acest tip
    ad = new Additive ();
    
    // si sa-i chemam o metoda
    // ad.b(); }
    
    //Metode
    int suma;
    suma  = suma (a,b);
    System.out.println (a+" + "+b+" = "+suma);
    
    Integer A,B;
    Integer Suma;
    A = new Integer (a);
    B = new Integer (b);
    Suma = new Integer (0);
    Suma = suma (A,B);
    System.out.println (A+" + "+B+" = "+Suma);
    
  }
  
  /*
    O metoda pur si simplu
    @throws IllegalArgumentException
  */
  public void b ()
  { 
    // exceptia se arunca creind un obiect de tipul IllegalArgumentException
    // in constructor putem da ca parametru si un string explicativ, dar nu
    // este neaparat necesar
    throw new IllegalArgumentException ("exceptie");
   }

  public int suma ( int a, int b )
    {
    return a+b;
    }

  public Integer suma ( Integer A, Integer B )
    {
    Integer S;
    S = new Integer ( A.intValue()+B.intValue() );
    return S;
    }

  public int Sumai ( Integer A, Integer B )
    {
    return A.intValue() + B.intValue();
    }

  public Integer SumaI ( Integer A, Integer B )
    {
    Integer S;
    S = A + B;
    return S;    
    } 
}

// Teme
// Laborator
//
// 1. Compilati programul cu "javac Additive.java" si apoi rulati-l
//    cu "java Additive" (sau cu mediul integrat)
//
// 2. Introduceti altceva decat un numar real (de exemplu un cuvant).
//    Ce se intampla ? La ce linii din program se semnaleaza erorile ?
//
// 3. Decomentati linia 64. Ce se intampla ? Observati stiva functiilor
//    apelate. La ce linii se semnaleaza erorile ? Inlocuiti string-ul
//    "exceptie" cu altceva. Compilati, rulati. Apoi stergeti parametrul cu
//    totul. Observati ce se intampla la rulare. Incercati apoi sa "prindeti"
//    exceptia cu un bloc try-catch, dupa modelul de mai sus.
//
// 4. Care este diferenta intre functia "suma" de la linia 93 si cea de la linia 98 ?
//    De ce functioneaza chiar daca au acelasi nume ? Prin ce se deosebesc ?
//
// 5. Apelati si functiile Sumai si SumaI   
//
// 6. Analizati liniile 31 si 35. Ce rol au ?
//
// 7. Realizati o functie ce are ca rol gasirea primului caracter din sir (caracterul de cautat este transmis caparametru)
//    rezultatul functiei este un numar intreg ce reprezinta pozitia caracterului gasit
//
// 8. Realizati o alta clasa ce implementeaza calculul radacinii functiei de gradul I//
//
// 9. Realizati o alta clasa Equation2.java care calculeaza radacinile ecuatiei de gradul II
//    a*x^2 + b*x + c = 0. Fisierul va avea acelasi nume ca si clasa.
//    Scrieti metoda main () care citeste a, b si c. Aceasta va chema
//    o alta metoda (scrisa tot de voi) care primeste ca parametri a, b si c si
//    afiseaza valorile radacinilor. Procedati in felul urmator:
// a) daca a = 0, b = 0, c = 0 atunci orice valoare reala este radacina
//    (semnalati acest lucru cu un println () adecvat)
// b) daca a = 0, b = 0 dar c <> 0, ecuatia nu are solutii
// c) daca a = 0 dar b <> 0, solutia se poate calcula, este una singura
// d) daca a <> 0, calculati delta. Daca delta este negativ, aruncati o
//    exceptie. Daca este pozitiv, calculati valorile radacinilor.
//    Veti avea nevoie de radical. Pentru aceasta, cautati in documentatie
//    pachetul Math, metoda sqrt ().
//
// Casa
//
// 1. Realizati o alta clasa ce retine coordonatele punctelor unui triunghi.
//    Veti implementa metode pentru calculul perimetrului si ariei triunghiului.
//    Clasa va contine 5 variabile: cele 3 puncte, perimetrul si aria.
//    Metode:
//      void setA ( int, int ) <- va seta coordonatele punctului A
//      void setB ( int, int ) <- va seta coordonatele punctului B
//      void setC ( int, int ) <- va seta coordonatele punctului C
//      void setPoint ( 
//
// Imi veti prezenta in laborator cele doua surse, Additive.java modificat si Equation2.java. 
// Cum va voi nota:
// - daca tema intarzie mai mult de doua saptamani nu o mai consider;
// - daca nu se compileaza nu ma uit peste ele;
// - verific functionalitatea pe un exemplu ales de mine. Daca nu functioneaza
// conform asteptarilor, va scad 1p pe corectura.
// - temele duplicat sau aproape identice le voi colecta si voi imparti nota la numarul autorilor. 